אין מצב שלא שמעתם על קרון או cron jobs.
כל מה שלא ידעתם עליו ופחדתם לשאול.
cron (קרון) היא תוכנה כזאת, שרצה לה במערכת ההפעלה 24 שעות, 7 ימים בשבוע, הרבה ימים בשנה ובכל דקה שלמה בודקת האם יש משהו חדש שהיא צריכה לעשות. קרון מובנה במערכת ההפעלה (unix) ופועל תמיד. בפועל cron משמש תוכנות אחרות ואת מערכת ההפעלה עצמה כדי לבצע פעולות מסוימות בזמנים מסוימים.
אנחנו ננצל את קיומו של הקרון למטרותינו הזדוניות, כדי להפעיל סקריפטים בזמן מסוים. החל מדברים פשוטים וחמודים כמו ניקוי המסד נתונים כל לילה, עדכון האתר, שליחת ספאם לשכנים וכל דבר אחר שיבוא פתאום לעשות.
ביסודה קרון בודקת אחת לדקה את קובץ המסימות (crontab) שיש לה. עלינו פשוט להוסיף רשומה משלנו לקובץ הזה ומשם קרון תדאג לבצע אותה בזמן שנבחר.
פורמט רישום זמן
כל שורה בקובץ ה-crontab מורכבת משישה שדות.
minute hour day_of_month month day_of_week command_to_execute
# for example:
1 0 31 3 * some_programm
# for example:
1 0 31 3 * some_programm
לדוגמה כדי להפעיל את program.exe בתאריך השלישי למרץ 18:20 הקוד יהיה זה:
בדקה ה-20 של השעה ה-18 ביום השלישי לחודש השלישי:
20 18 03 03 * Programe.exe
פרקי זמן
כוכבית מסמנת "כל יחידת זמן".
כלומר כוכבית בעמודת השעות תסמן "כל שעה".
כוכבית בעמודת החודשים תסמן "כל חודש".
חילוק מאפשר לבחור חלק מהזמן. כלומר "כל פרק זמן כלשהו".
20/* יקרה כל פעם שכמות הדוקת תתחלק ב20 ללא שארית
(00:00, 00:20, 00:40, 01:00, 01:20, ..)
Every 20 minutes: */20 * * * * Program
Every 3 minutes: */3 * * * * Program
Every 8 hours: * */8 * * 0 Program
Once a week (sunday midnight): 0 0 * * 0 Program
Once a month (1st day of month midnight) 0 0 * 1 * Program
Every 3 minutes: */3 * * * * Program
Every 8 hours: * */8 * * 0 Program
Once a week (sunday midnight): 0 0 * * 0 Program
Once a month (1st day of month midnight) 0 0 * 1 * Program
להפעיל את הסקריפט
במקום Program יהיה עלינו לרשום בקובץ הזה את הסקריפט שלנו. נניח שהסקריפט שלנו נמצא בנתיב /home/alex/test.php. ברגע זה חשוב לנו להיזכר שהרי php היא שפה מפוענחת ומנוע ה-php הוא זה שמפענח ומבצע את הקוד שלנו.
התוכנה שעלינו להפעיל בפועל זה לא הסקריפט שלנו, אלה מנוע ה-php ולהגיד לו שיבצע את הקוד שכתוב בקובץ. בדרך כלל התוצאה הסופית תראה כך:
* * * * * php -f /home/alex/test.php
מה שאומר: כל דקה להפעיל את מנוע ה-php ולבקש ממנו לפענח (ולבצע) את הקוד בקובץ הנ"ל. אבל, הכל לא כל כך פשוט והדרך להפעיל את מנוע ה-php שונה מאיחסון לאיחסון.
איך ואיפה לרשום את זה
קובץ ה-crontab הוא קובץ של מערכת ההפעלה. למשתמשים של חברות איחסון לרוב אין גישה ישירה אליו, אבל ניתן לבצע הוספה של פקודות אליו דרך פאנל הניהול של חברת האיחסון.
אם ברשותך פאנל ניהול מסוג cPanel
יש לכתוב את הפקודה באופן הבא: /usr/local/bin/php -f /path/to/script.php
קישור לתמונה להמחשה.
בפאנל של Direct Admin
יש לכתוב בפקודה: /usr/local/bin/php /path/to/script.php
קישור לתמונה להמחשה.
ובמערכת Isp Manager
יש לכתוב בפקודה: /usr/bin/php -f /path/to/script.php
קישור לתמונה.
מיקום הסקריפט
בכל הדוגמאות מיקום הסקריפט היה /path/to/script.php . כדי למצוא את מיקום הסקריפט האימיתי - אפשר להכניס לקוד את השורה הבאה בראש הסקריפט, להפעיל אותו פעם אחת ולמחוק את השורה שוב.
die(realpath(__FILE__));
איך להפעיל קרון ב-windows
קודם כל, למה לכל הרוחות השרת שלכם ב-windows? מערכות unix ידועות כהרבה יותר יציבות, בטוחות, מהירות ואפפקטיביות משרתי windows. רגע, נחזור לענייננו. בשרתי windows (כמו גם במחשב שלכם, כנראה) אין cron. אותו מחליף הבחור המיקרוסופטי, ה- Task Scheduler של ווינדוס. גם דרכו אפשר לדמות פעולה של קרון לצורכי עבודה.
להגיע אליו אפשר דרך Start -> Run -> Taskschd.msc
או ב-winXp דרך Contor Panel -> Scheduled Tasks
בשורת הפקודה לביצוע לכתוב C:\www\server\php\php.exe -f "C:\Path\to\script.php"
כאשר את מיקום קובץ הסקריפט הנכון ניתן לקבל באותו אופן המתואר מלעה, ואת מיקום מפענח ה-php (ה- php.exe הזה) אפשר למצוא בתיקיה שאליה התקנתם את php. אם התקנתם הכל לפי המדריך התקנה באתר, אזי מיקום המפענח הוא כפי שכתוב בדוגמה.
דוגמה ל windows7 ו-windowsXP
עכשיו אתם יודעים איך להפעיל סקריפט כל X זמן. נסו את כל הפעולות היקרות שיש לכם במערכת להעביר לעבודה בקרון, כמו חישוב רייטינגים, ציור כפתורים עם כמות משתמשים אוןלייו או חישוב 10 הכתבות הפופולאריות. גם אם הקרון יפעל אחת לדקה, העומס שתורידו מהשרת שלכם בשעות הכבדות יהיה משמעוטי.
קרון הוא כלי חשוב בידי המפתחים, השתמשו בו בחוכמה.
תגובות לכתבה:
אם אני עובד עם שרת חינמי באינטרנט, שאליו אין לי גישה פיזית ואין לי גישה מלאה, האם אני יכול להשתמש ב-cron?
לפי מה שהבנתי יש קובץ מיוחד שאליו צריך לכתוב את המשימות. איפה הוא נמצא במידה ו-cron מותקנת על השרת איתו אני עובד?
הקובץ שמכיל את נתוני הקרון הוא קובץ מערכת שאין ללוקוחות שרתי האיחסון גישה אליו גם לא בשירותי איחסון שבתשלום. מערכות ניהול אתרים כמו cpanel, derect admin ו-isp עושים את הפעולות הנדרשות על הקובץ הזה בעצמם, וכל מה שנשאר למשתמש זה לשנות את ההגדרות במערכת הניהול.
רוב חברות האיחסון החינמיים לא נותנות מערכת ניהול כזו, למרות שיש כאלה שכן. במקרה הזה אין לך אפשרות ליצור פעולות קרון בשרת שלך, אולם תמיד תוכל להשתמש בשירותים של חברות חיצוניות, כמו http://www.google.com/search?q=web cron שיתנהגו כאילו מישהו עם דפדפן יגלוש אליך כל פרק זמן מסוים.
תן להם לגלוש אליך לעמוד דוגמאת copde.php?password=123 ותבדוק בקוד שלך שהסיסמה נכונה. באופן הזה גם אם מישהו יגלה שיש לך סקריפט כזה בשרת, הוא לא יוכל לבצע אותו בלי לדעת את הסיסמה.
אחי שמע אני מנסה את זה בבית וזה לא עוד לי.
יש לי ווינדוס XP עשיתי מה שאמרתה וזה אומר שזה לא נימצא..
מה לעשות?
במחשבים עם מערכת הפעלה windows לא קיים קרון. תוכל להשתמש ב-task scheduler במקום. ניתן להגיע אליו בעזרת Control Panel -> Scheduled tasks.
בשורת הפקודה יש לכתוב את הפקודה כמתואר מעלה, רק לתת את המיקום הנכון של php.exe במחשב שלך. תעשה חיפוש במחשב, תמצא את php.exe ותשתמש בו כפקודה.
__עזרה פרטית נוספת תוכל לקבל בפורום.__
Taskschd.msc לא נמצא, מה עושים?
--
תגובה:
Control Panel -> Scheduled tasks
עזרה פרטית רק דרך הפורום
ישר כח
כל הכבוד!! מדריך מצוין!
תודה רבה.המדריך כתוב בצורה ברורה מאוד.
אני מנסה להפעיל את זה על המחשב של עם חלונות, והבעיה היא שבמשימות המתוזמנות, אין אפשרות ליצור תדירות גבוה יותר מאשר פעם ביום. ואילו אני צריך פעם בדקה.
ע"פ המדריך, אם אני רוצה להפעיל את הסקריפט בכל יום רביעי בשעה 3 וחצי בבוקר בכל חודש אני צריך לכתוב ככה:
30 03 04 * * Programe.exe
בדקה ה-30 של השעה ה-3 ביום הרביעי
?